// 导入dayjs库
import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'

// 设置为中文
dayjs.locale('zh-cn')

/**
 * 格式化日期
 * @param {Date|String|Number} date 日期对象、日期字符串或时间戳
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 格式化后的日期字符串
 */
export const formatDate = (date, format = 'YYYY-MM-DD') => {
  return dayjs(date).format(format)
}

/**
 * 获取今天的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 今天的日期字符串
 */
export const getToday = (format = 'YYYY-MM-DD') => {
  return dayjs().format(format)
}

/**
 * 获取昨天的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 昨天的日期字符串
 */
export const getYesterday = (format = 'YYYY-MM-DD') => {
  return dayjs().subtract(1, 'day').format(format)
}

/**
 * 获取本周开始的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 本周开始的日期字符串
 */
export const getWeekStart = (format = 'YYYY-MM-DD') => {
  return dayjs().startOf('week').format(format)
}

/**
 * 获取本周结束的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 本周结束的日期字符串
 */
export const getWeekEnd = (format = 'YYYY-MM-DD') => {
  return dayjs().endOf('week').format(format)
}

/**
 * 获取本月开始的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 本月开始的日期字符串
 */
export const getMonthStart = (format = 'YYYY-MM-DD') => {
  return dayjs().startOf('month').format(format)
}

/**
 * 获取本月结束的日期
 * @param {String} format 格式化模板，默认为YYYY-MM-DD
 * @returns {String} 本月结束的日期字符串
 */
export const getMonthEnd = (format = 'YYYY-MM-DD') => {
  return dayjs().endOf('month').format(format)
}

/**
 * 计算两个日期之间的差值
 * @param {Date|String|Number} date1 日期1
 * @param {Date|String|Number} date2 日期2
 * @param {String} unit 单位，可选值：day, week, month, year等
 * @returns {Number} 差值
 */
export const diff = (date1, date2, unit = 'day') => {
  return dayjs(date1).diff(dayjs(date2), unit)
}

/**
 * 判断日期是否相同
 * @param {Date|String|Number} date1 日期1
 * @param {Date|String|Number} date2 日期2
 * @param {String} unit 比较的精度，可选值：day, week, month, year等
 * @returns {Boolean} 是否相同
 */
export const isSame = (date1, date2, unit = 'day') => {
  return dayjs(date1).isSame(dayjs(date2), unit)
}

export default {
  formatDate,
  getToday,
  getYesterday,
  getWeekStart,
  getWeekEnd,
  getMonthStart,
  getMonthEnd,
  diff,
  isSame
} 